package com.wisezone.workflow.core;

import java.util.Map;

import com.wisezone.common.Pagination;
import com.wisezone.common.exception.WzServiceException;
import com.wisezone.workflow.bean.WorkFlowEntity;
import com.wisezone.workflow.bean.search.WorkFlowSearch;

/**
 * 工作流辅助类 2010-08-18
 * 
 * @author shan
 * 
 */
public interface WorkFlowService {

	/**
	 * 获得流程申请信息
	 * @param searchEntity
	 * @return
	 * @throws Exception
	 */
	public<T> Pagination<T> listFormByPage(WorkFlowSearch searchEntity) throws WzServiceException;
	
	/**
	 * 活动开始
	 * @param entity 工作流业务实体
	 * @param key    工作流标识
	 * @param userId  操作人ID
	 * @param nextUserIds  下一活动操作人ID 数组
	 * @param nextUserGroupIds  下一活动操作人组ID 数组
	 * @param opinion 活动意见
	 * @param variableMap   流程实例变量
	 * @param localVariableMap   活动实例变量
	 * @return  entity 工作流业务实体
	 * @throws Exception
	 */
	public WorkFlowEntity start(WorkFlowEntity entity, String key, Long userId,
			Long[] nextUserIds, Long[] nextUserGroupIds,String opinion,
			Map<String, Object> variableMap,
			Map<String, Object> localVariableMap) throws WzServiceException;

	/**
	 * 活动操作
	 * @param entity  工作流业务实体
	 * @param activityInstId  活动实例ID
	 * @param userId   操作人ID
	 * @param linkId   下一活动连接ID
	 * @param nextUserIds 下一活动操作人ID 数组
	 * @param nextUserGroupIds 下一活动操作人组ID 数组
	 * @param opinion 活动意见
	 * @param variableMap   流程实例变量
	 * @param localVariableMap   活动实例变量
	 * @return entity 工作流业务实体
	 * @throws Exception
	 */
	public WorkFlowEntity operate(WorkFlowEntity entity, Long activityInstId,
			Long userId, Long linkId, Long[] nextUserIds,
			Long[] nextUserGroupIds, String opinion,
			Map<String, Object> variableMap,
			Map<String, Object> localVariableMap) throws WzServiceException;
	
	/**
	 * 逻辑删除活动实例
	 * @param processInstId 流程实例ID
	 * @param userId 活动参与用户ID
	 * @throws WzServiceException
	 */
	public void delete(Long processInstId,Long userId) throws WzServiceException;
}
